package com.ssy.lingxi.product.service.material;

import com.ssy.lingxi.common.constant.tree.Node;
import com.ssy.lingxi.common.model.dto.UserLoginCacheDTO;
import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.product.entity.material.MaterialGroup;
import com.ssy.lingxi.product.model.request.MaterialGroupChangeParentRequest;

import java.util.List;

/**
 * 物料组-service
 * @author hsl
 * @version 2.0.0
 * @date 22/03/22 16:49
 */
public interface IMaterialGroupService {
    /**
     * 保存/修改 物料组
     * @param sysUser 登录用户
     * @param materialGroup 物料组
     */
    Wrapper<Void> saveOrUpdateMaterialGroup(UserLoginCacheDTO sysUser, MaterialGroup materialGroup);

    /**
     * 移动物料组
     * @param sysUser 登录用户
     * @param materialGroupChangeParentRequst 移动物料组请求
     * @return 默认成功信息
     */
    Wrapper<Void> changeParent(UserLoginCacheDTO sysUser, MaterialGroupChangeParentRequest materialGroupChangeParentRequst);

    /**
     * 删除物料组
     * @param sysUser 登录用户
     * @param id 物料组id
     * @return 默认成功信息
     */
    Wrapper<Void> delete(UserLoginCacheDTO sysUser, Long id);

    /**
     * 获取物料组树
     * @param sysUser 登录用户
     * @param rootNodeId 根节点id
     * @param excludeId 排除id（用于选择移动物料组时查询）
     * @return 树形列表
     */
    Wrapper<List<Node>> getMaterialGroupTree(UserLoginCacheDTO sysUser, Long rootNodeId, Long excludeId);

    /**
     * 获取物料组详情
     * @param id 物料组id
     * @return 物料组详情
     */
    MaterialGroup getMaterialGroup(Long id);
}
